package homework.xuluoxi;

/*
 * 作业名称：学生信息管理系统
 * 作业功能：实现简易学生信息管理系统
 * 分　　类：存放学生信息的集合
 * 学　　员：徐罗希
 * 版　　本：V1.0
 * 备　　注：模块三作业
 */

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class SIList {

    // 1、定义成员变量
    private List<Student> siList = new ArrayList<>();

    // 2、对外提供唯一对象
    private static SIList mySI = new SIList();
    private SIList() {}
    public static SIList getList() {
        return mySI;
    }

    // 3、新增学生信息的方法
    public void addStudent() {
        Scanner sc = new Scanner(System.in);
        LocalDateTime ldt = LocalDateTime.now();
        String id = "S" + ldt.getYear() + ldt.getMonthValue() + ldt.getDayOfMonth() + ((ldt.getHour() + ldt.getMinute() + ldt.getSecond()) / 12) + Student.idNumber;
        Student.idNumber ++;
        System.out.print("请输入学生的姓名：");
        String name = sc.next();
        System.out.print("请输入学生的年龄：");
        int age = sc.nextInt();
        Student s = new Student(id, name, age);
        siList.add(s);
    }

    // 4、查看所有学生信息的方法
    public void showStudent() {
        Student.number = 1;
        for (Student s: siList) {
            s.show();
        }
    }

    // 5、查找指定学生信息的方法
    public void findStudent() {
        Scanner sc = new Scanner(System.in);
        int select;
        System.out.println("请选择您要查找的信息类型：1、学号；2、姓名；3、年龄");
        do {
            select = sc.nextInt();
            if (select < 1 || select > 3) {
                System.out.println("输入有误，请重新输入");
            }
        }
        while (!(select > 0 && select < 4));

        // 按照学号的方式查找
        if (select == 1) {
            System.out.print("请输入想要查找的学号：");
            String id = sc.next();
            Student tempS = null;
            Student.number = 1;
            for (Student s: siList) {
                tempS = s.findID(id);
                if (tempS != null) {
                    tempS.show();
                    break;
                }
            }
            if (tempS == null) {
                System.out.println("未找到符合要求的信息");
            }
        }

        // 按照姓名的方式查找
        if (select == 2) {
            boolean findCase = false;
            System.out.print("请输入想要查找的姓名：");
            String name = sc.next();
            Student tempS = null;
            Student.number = 1;
            for (Student s: siList) {
                tempS = s.findName(name);
                if (tempS != null) {
                    tempS.show();
                    findCase = true;
                }
            }
            if (findCase == false) {
                System.out.println("未找到符合要求的信息");
            }
        }

        // 按照年龄的方式查找
        if (select == 3) {
            boolean findCase = false;
            System.out.print("请输入想要查找的年龄：");
            int age = sc.nextInt();
            Student tempS = null;
            Student.number = 1;
            for (Student s: siList) {
                tempS = s.findAge(age);
                if (tempS != null) {
                    tempS.show();
                    findCase = true;
                }
            }
            if (findCase == false) {
                System.out.println("未找到符合要求的信息");
            }
        }
    }

    // 6、删除指定学生信息的方法
    public void deleteStudent() {
        Scanner sc = new Scanner(System.in);
        int number;
        showStudent();
        System.out.print("请输入想要删除的行数：");
        do {
            number = sc.nextInt();
            if (number <= 0 || number >= Student.number) {
                System.out.println("输入行号有误，请重新输入");
            }
        }
        while (number <= 0 || number >= Student.number);
        siList.remove(number - 1);
    }

    // 7、修改指定学生信息的方法
    public void modifyStudent() {
        Scanner sc = new Scanner(System.in);
        int number;
        int select;
        showStudent();
        System.out.print("请输入想要修改的行数：");
        do {
            number = sc.nextInt();
            if (number <= 0 || number >= Student.number) {
                System.out.println("输入行号有误，请重新输入");
            }
        }
        while (number <= 0 || number >= Student.number);
        System.out.println("请输入想要修改的内容：1、姓名；2、年龄");
        do {
            select = sc.nextInt();
            if (select < 1 || select > 2) {
                System.out.println("输入有误，请重新输入");
            }
        }
        while (!(select > 0 && select < 3));

        // 修改姓名
        if (select == 1) {
            System.out.print("请输入修改后的姓名：");
            String name = sc.next();
            siList.get(number - 1).setName(name);
        }

        // 修改年龄
        if (select == 2) {
            System.out.print("请输入修改后的年龄：");
            int age = sc.nextInt();
            siList.get(number - 1).setAge(age);
        }
    }
}
